home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Shareware World / Comms & Internet / HTML and CSS modes / HTML and CSS Modes / hctsmslMenu.tcl < prev    next >
Text File  |  1998-11-01  |  10KB  |  268 lines

  1. ## -*-Tcl-*-
  2.  # ###################################################################
  3.  #  HTML and CSS mode - tools for editing Cascading Style Sheets
  4.  # 
  5.  #  FILE: "hctsmslMenu.tcl"
  6.  #                                    created: 97-03-01 17.33.59 
  7.  #                                last update: 98-11-01 16.58.19 
  8.  #  Author: Johan Linde
  9.  #  E-mail: <jl@theophys.kth.se>
  10.  #     www: <http://bach.theophys.kth.se/~jl/Alpha.html>
  11.  #  
  12.  # Version: 2.1.3 and 1.1
  13.  # 
  14.  # Copyright 1996-1998 by Johan Linde
  15.  #  
  16.  # This software may be used freely, and distributed freely, as long as the 
  17.  # receiver is not obligated in any way by receiving it.
  18.  #  
  19.  # If you make improvements to this file, please share them!
  20.  # 
  21.  # ###################################################################
  22.  ##
  23.  
  24. proc hctsmslMenu.tcl {} {}
  25.  
  26. # Variables defining submenus.
  27. set htmlStyleSub {{"" Style STYLE} {"<B/b" Span SPAN} "(-" {"" "Import…"} {"" Font} {"" Color}
  28.     {"" Background} {"" Text} {"" Margin}
  29.     {"" Padding} {"" Border} {"" "Border Width"} {"" "Border Style"}
  30.     {"" "Border Color"} {"" Size} {"" Float} 
  31.     {"" Clear} {"" Display} {"" "List Style"}}
  32.  
  33. set htmlHeadersSub {{"<B<O/1" "Header1/H1 no attr" H1}
  34.     {"<B<O/2" "Header2/H2 no attr" H2}
  35.     {"<B<O/3" "Header3/H3 no attr" H3}
  36.     {"<B<O/4" "Header4/H4 no attr" H4}
  37.     {"<B<O/5" "Header5/H5 no attr" H5}
  38.     {"<B<O/6" "Header6/H6 no attr" H6}}
  39.  
  40. set htmlBlocksSub {{"" "Insert Line Breaks/Remove Line Breaks"}
  41.     {"" "Insert Paragraphs"} "(-"
  42.     {"<U/b" "Paragraph/P no attr" P}
  43.     {"<U<O/b" "Division" DIV}
  44.     {"<B<O/Q" "Block Quote" BLOCKQUOTE} {"<B<O/S" "Address" ADDRESS}
  45.     {"<B<O/C" "Center" CENTER} {"<B<O/P" "Preformatted" PRE}
  46.     {"<B<O/X" "Multi Column" MULTICOL}
  47.     {"<B<O/Z" "Spacing" SPACER} {"" "Direction Override" BDO} {"<B<O/u" "Inserted Text" INS}
  48.     {"<B<O/v" "Deleted Text" DEL} "(-"
  49.     {"<O/b" "Line Break/BR no attr" BR}
  50.     {"<B<O/H" "Horizontal Rule/HR no attr" HR}
  51.     {"<B<O/B" "No Line Break" NOBR} {"<B<O/W" "Word Break" WBR}}
  52.  
  53. set htmlStylesSub {{"<B<I/F" Font FONT} {"<B<I/N" Basefont BASEFONT}
  54.     {"<B<I/M" Marquee MARQUEE} "(-" {"<B<I/B" Bold B}
  55.     {"<B<I/I" Italic I} {"<B<I/-" "Strike out" STRIKE} {"<B<I<O/-" Underlined U}
  56.     {"<B<I/." Superscript SUP} {"<B<I/," Subscript SUB} {"<B<I<O/." Bigger BIG}
  57.     {"<B<I<O/," Smaller SMALL} {"<B<I/T" Typewriter TT} {"<B<I/Z" Blinking BLINK}
  58.     "(-" {"<B<I/Q" Quotation Q} {"<B<I/A" Abbreviation ABBR} {"<B<I/Y" Acronym ACRONYM} 
  59.     {"<B<I/E" Emphasis EM} {"<B<I/S" Strong STRONG} {"<B<I/D" Definition DFN}
  60.     {"<B<I/C" Code CODE} {"<B<I/V" Variable VAR}    {"<B<I/X" Citation CITE} 
  61.     {"<B<I/K" Keyboard KBD} {"<B<I/P" Sample SAMP}}
  62.  
  63. set htmlLinksSub {{"<B<O/A" "Link or Anchor" A} {"<B<O/I" Image IMG}
  64.     {"<B<O/T" Object OBJECT} {"" Sound BGSOUND}}
  65.  
  66. set htmlPlug-insSub {{"<B<O/E" General EMBED} {"" LiveAudio EMBED}
  67.     {"" LiveVideo EMBED} {"" "QuickTime Movie" EMBED}
  68.     {"" "QuickTime VR" EMBED} {"" RealAudio EMBED} "(-" {"<B<O/N" "No Embed" NOEMBED}}
  69.  
  70. set htmlListsSub {{"" "Make List…"} "(-" {"<B<O/U" "Bulleted/UL no attr" UL}
  71.     {"<B<I/U" "New Bulleted Item"}
  72.     {"<B<O/O" "Numbered/OL no attr" OL}
  73.     {"<B<I/O" "New Numbered Item"} {"<B<O/D" "Directory" DIR}
  74.     {"<B<O/M" "Menu" MENU} {"<B<I/L" "New List Item" LI} "(-"
  75.     {"<B<U<O/D" "Discursive" DL} {"<B<I<O/L" "New Discursive Entry"}}
  76.  
  77. set htmlFormsSub {{"<B<U/F" Form FORM} {"<B<U/D" "Field Set" FIELDSET} {"<B<U/L" Legend LEGEND}
  78.     {"<B<U/E" Label LABEL} "(-" {"<B<U/T" Text INPUT}
  79.     {"<B<U/B" Checkbox  INPUT} {"<B<U/N" "Input Button" INPUT}
  80.     {"<B<U/R" Radio INPUT} {"<B<U/S" Submit INPUT}
  81.     {"<B<U/C" Reset INPUT} {"<B<U/P" Password INPUT}
  82.     {"<B<U/H" Hidden INPUT} {"<B<U/I" Image INPUT}
  83.     {"<B<U/U" "File Upload" INPUT}
  84.     "(-" {"<B<U<I/U" Button BUTTON} {"<B<U<I/S" Select SELECT} {"<B<U/G" "Option Group" OPTGROUP}
  85.     {"<B<U/O" Option OPTION} {"<B<U<I/T" Textarea TEXTAREA} {"" "Key Generator" KEYGEN}}
  86.  
  87. set htmlTablesSub {{"" "Table Template…"} {"" "Tabs to Rows…/Rows to Tabs"} {"" "Import Table…"} "(-"
  88.     {"<U<O/T" Table TABLE} {"<U<O/R" "Row/TR no attr" TR}
  89.     {"<U<O/H" "Header/TH no attr" TH} {"<U<O/D" "Cell/TD no attr" TD}
  90.     {"<U<O/C" Caption CAPTION} "(-"
  91.     {"<B<U<O/H" Head THEAD} {"<B<U<O/B" Body TBODY} {"<B<U<O/F" Foot TFOOT}
  92.     "(-" {"<B<U<O/G" "Column Group" COLGROUP} {"<B<U<O/C" "Column" COL}}
  93.  
  94. set htmlFramesSub {{"<B<U<I/F" "New Doc. with Frames…"} "(-" {"<B<U<I/O" Frameset FRAMESET}
  95.     {"<B<U<I/R" Frame FRAME} {"" "Inline Frame" IFRAME}
  96.     {"<B<U<I/N" "No Frames" NOFRAMES}}
  97.  
  98. set htmlImageSub {{"" "Convert NCSA Map…"} {"" "Convert CERN Map…"} "(-" {"<B<U/M" Map MAP} 
  99.     {"<B<U/A" Area AREA}}
  100.  
  101. set htmlJavaSub {{"<U<I<O/J" Applet APPLET} {"<U<I<O/P" Parameter PARAM}
  102.     "(-" {"<U<I<O/S" Script SCRIPT} {"<U<I<O/N" "No Script" NOSCRIPT} {"" Server SERVER}}
  103.  
  104. set htmlLayersSub {{"" Layer LAYER} {"" "Inline Layer" ILAYER} {"" "No Layer" NOLAYER}}
  105.  
  106. set htmlOtherSub {{"<B<U<I/C" Comment} {"<B<U<I/B" Base BASE}
  107.     {"<B<U<I/I" Isindex ISINDEX}
  108.     {"<B<U<I/L" Link LINK} {"<B<U<I/M" Meta META} {"" "Comment Line"}}
  109.  
  110. set htmlSubMenus {HTML Browsers Preferences
  111. {Style Sheets} Headers {Blocks and Dividers} Styles Links 
  112. Plug-ins Lists Forms Tables Frames {Image Maps} {Java and JavaScript} Layers Other}
  113.  
  114. # Index of which menu is the first with HTML elements.
  115. set htmlStartElements 3
  116.  
  117. # Returns a list defining a submenu.
  118. proc htmlBuildOneMenu {me} {
  119.     global htmlMenuKey
  120.     set me0 [lindex $me 0]
  121.     global html${me0}Sub
  122.     # CSS menu share with Style menu
  123.     if {$me0 == "CSS"} {set me0 Style}
  124.     set tmp ""
  125.     foreach it [set html[lindex $me 0]Sub] {
  126.         if {$it == "(-"} {lappend tmp $it; continue}
  127.         if {[info exists htmlMenuKey(${me0}/[lindex $it 1])]} {
  128.             set key $htmlMenuKey(${me0}/[lindex $it 1])
  129.         } else {
  130.             set key [lindex $it 0]
  131.         }
  132.         set it2 [split [lindex $it 1] /]
  133.         if {[llength $it2] == 1} {
  134.             lappend tmp "$key[lindex $it2 0]"
  135.         } elseif {$key != ""} {
  136.             lappend tmp "<S$key[lindex $it2 0]" "<S<I$key[lindex $it2 1]"
  137.         } else {
  138.             lappend tmp "<S$key[lindex $it2 1]" "<S$key[lindex $it2 0]"
  139.         }
  140.     }
  141.     return $tmp
  142. }
  143.  
  144. # Rebuilds a submenu.
  145. proc htmlRebuildOneMenu {me {deleteCache 0}} {
  146.     set meny [htmlBuildOneMenu [lindex $me 0]]
  147.     menu -M HTML -p htmlMenuItem -m -n $me $meny
  148.     if {[info commands "html[lindex $me 0]MenuExtra"] != ""} {
  149.         eval html[lindex $me 0]MenuExtra
  150.     }
  151.     if {$deleteCache} {
  152.         htmlDeleteCache "HTML menu cache"
  153.         htmlDeleteCache "HTML Utilities menu cache"
  154.     }
  155.     htmlDisMark
  156.     htmlUtilDisMark
  157. }
  158.  
  159. #===============================================================================
  160. # Custom Key Bindings
  161. #===============================================================================
  162.  
  163. proc htmlReadMenuKeys {} {
  164.     global PREFS
  165.     if {[file exists "$PREFS:HTML:Menu key bindings"]} {
  166.         catch {uplevel #0 [list source "$PREFS:HTML:Menu key bindings"]}
  167.     }
  168. }
  169.  
  170. proc htmlWriteMenuKeys {} {
  171.     global PREFS htmlMenuKey
  172.     if {![info exists htmlMenuKey]} {return}
  173.     message "Saving custom key bindings…"
  174.     foreach m [array names htmlMenuKey] {
  175.         lappend txt "set htmlMenuKey(\[list $m\]) [list $htmlMenuKey($m)]"
  176.     }
  177.     if {![file exists $PREFS]} {mkdir $PREFS}
  178.     if {![file exists $PREFS:HTML]} {mkdir $PREFS:HTML}
  179.     set fid [open "$PREFS:HTML:Menu key bindings" w]
  180.     puts $fid [join $txt \n]
  181.     close $fid
  182.     unset htmlMenuKey
  183. }
  184.  
  185. proc htmlKeyBindings {} {
  186.     global htmlSubMenus htmlUtilSubMenus htmlMenuKey
  187.     set ret ""
  188.     set rebuildHTML 0
  189.     set rebuildUtils 0
  190.     set rebuildCSS 0
  191.     set somethingModified 0
  192.     htmlReadMenuKeys
  193.     if {![catch {listpick -p "Choose a submenu to change key bindings in" \
  194.       [lsort [concat $htmlSubMenus $htmlUtilSubMenus {{Small Chars} {Capital Chars} {Other Chars 1} {Other Chars 2}}]]} meny] && $meny != ""} {
  195.         if {[string match "*Chars*" $meny]} {
  196.             catch {htmlSetEntityKeys $meny}
  197.         } else {
  198.             catch {htmlSetKeysInMenu $meny}
  199.         }
  200.     }
  201.     if {$somethingModified} {htmlWriteMenuKeys}
  202.     if {$rebuildHTML} {htmlRebuildMenu "Rebuilding HTML menu…"; message "Done."}
  203.     if {$rebuildUtils} {htmlRebuildUtilsMenu "Rebuilding HTML Utilities menu…"; message "Done."}
  204.     if {$rebuildCSS} {cssRebuildMenu}
  205.     catch {unset htmlMenuKey}
  206. }
  207.  
  208.  
  209. # Redefine key bindings in one submenu.
  210. proc htmlSetKeysInMenu {meny} {
  211.     global htmlMenuKey htmlModeIsLoaded cssModeIsLoaded
  212.     
  213.     set meny0 [lindex $meny 0]
  214.     global html${meny0}Sub
  215.     # CSS menu share with Style menu
  216.     if {$meny0 == "CSS"} {set meny0 Style}
  217.     set items [set html[lindex $meny 0]Sub]
  218.     regsub -all {\"\(-\"} $items "" items
  219.     foreach it $items {
  220.         if {[info exists htmlMenuKey(${meny0}/[lindex $it 1])]} {
  221.             set tmpKeys([lindex $it 1]) $htmlMenuKey(${meny0}/[lindex $it 1])
  222.         } else {
  223.             set tmpKeys([lindex $it 1]) [lindex $it 0]
  224.         }
  225.         lappend items2 [list $tmpKeys([lindex $it 1]) [lindex $it 1]]
  226.     }
  227.     if {[eval dialog::adjustBindings [list $meny] newKeys modified 1 $items2] == "Cancel"} {return}
  228.  
  229.     # Save new key bindings
  230.     foreach it $modified {
  231.         set htmlMenuKey(${meny0}/$it) $newKeys($it)
  232.     }
  233.     if {[llength $modified]} {
  234.         htmlDeleteCache "CSS keybindings cache"
  235.         uplevel 1 {set somethingModified 1}
  236.         switch $meny {
  237.             HTML {uplevel 1 {set rebuildHTML 1}}
  238.             Utilities {uplevel 1 {set rebuildUtils 1}}
  239.             "Style Sheets" {
  240.                 # Rebuild both Style sheet menu and CSS menu
  241.                 htmlDeleteCache "CSS menu cache"
  242.                 htmlRebuildOneMenu "Style Sheets" 1
  243.                 if {[info exists cssModeIsLoaded]} {uplevel 1 {set rebuildCSS 1}}
  244.             }
  245.             CSS {
  246.                 # Rebuild both Style sheet menu and CSS menu
  247.                 if {[info exists htmlModeIsLoaded]} {
  248.                     htmlRebuildOneMenu "Style Sheets" 1
  249.                 } else {
  250.                     htmlDeleteCache "HTML menu cache"
  251.                 }
  252.                 uplevel 1 {set rebuildCSS 1}
  253.             }
  254.             default {
  255.                 htmlRebuildOneMenu $meny 1
  256.                 # Redefine key bindinds in CSS mode.
  257.                 if {[info exists cssModeIsLoaded]} {
  258.                     foreach k [array names newKeys] {
  259.                         lappend re [list $k $tmpKeys($k) $newKeys($k)]
  260.                         cssReBindKey $meny0 $re
  261.                     }
  262.                 }
  263.             }
  264.         }
  265.     }
  266. }
  267.  
  268.